#ifndef __DICTIONARY_H__
#define __DICTIONARY_H__

// 预热，将词典数据以及索引都加载进来，单例模式

#include <pthread.h>
#include <vector>
#include <string>
#include <unordered_map>
#include <unordered_set>

using namespace std;

class Dictionary
{
public:
    static Dictionary *getInstance();
                                                         
    vector<pair<string, int>> &getEnDict();                          // 获取英文词典
    vector<pair<string, int>> &getCnDict();                          // 获取中文词典
    unordered_map<string, unordered_set<int>> &getEnIndexTable();    // 获取英文索引表
    unordered_map<string, unordered_set<int>> &getCnIndexTable();    // 获取中文索引表
    
private:
    Dictionary();
    ~Dictionary();
    static void init_r();
    static void destory();
    
    void init();           // 初始化词典和索引
private:
    static Dictionary *_pInstance;
    static pthread_once_t _once;

    vector<pair<string, int>> _EnDict;     // 英文词典
    vector<pair<string, int>> _CnDict;     // 中文词典
    unordered_map<string, unordered_set<int>> _EnIndexTable;   // 英文词典索引库
    unordered_map<string, unordered_set<int>> _CnIndexTable;   // 中文词典索引表
    
};

#endif